<?php
// -- 登陆页面 包含自动登陆功能

/*
CREATE TABLE `token` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `token` varchar(45) NOT NULL COMMENT '登陆令牌',
  `user_id` int(11) NOT NULL COMMENT '用户ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*/

require_once "../init.php";

// 自动登陆 检测login_token
if (isset($_COOKIE["login_token"])) {
	// 根据login_token获取用户的token
	$token = select("token", "token = {$_COOKIE["login_token"]}");

	// TODO 检测$token是否存在

	// 获取用户数据
	$user = select("user", "id = {$token["user_id"]}");

	// TODO 检测用户是否存在

	// 设置session
	$_SESSION["user"] = $user;

	// 登陆成功 跳转到用户页面
	redirect(isset($_GET["url"]) ? urldecode($_GET["url"]) : "user.php");
}

// 判断页面是否为POST提交
if ($_SERVER["REQUEST_METHOD"] == "POST") {
	// 获取参数
	$username = $_POST["username"];
	$password = $_POST["password"];

	// 从数据库获取用户数据
	$user = select("user", "username = '$username'");

	// 验证密码
	if ($user['password'] !== md5($password.$user['salt'])) {
		redirect("login.php?tip=pwd");
	}

	// 将用户数据存入session
	$_SESSION["user"] = $user;

	// 判断用户是否开启了自动登陆
	if (isset($_POST["autologin"])) {
		// 创建一个token
		$token_id = mt_rand(100000000, 999999999);

		// 使用数据库存储token
		$token = array(
			"token" => $token_id,
			"user_id" => $user["id"],
		);
		insert("token", $token);

		// 设置cookie
		setcookie("login_token", $token_id, time() + 86400 * 365, "/");
	}

	// 登陆成功 跳转到用户中心页面
	redirect(isset($_GET["url"]) ? urldecode($_GET["url"]) : "user.php");
}
?>
<!DOCTYPE html>
<html>
<head>
	<title>登陆</title>
</head>
<body>
<form method="post" action="login.php">
	用户名: <input type="text" name="username" /><br>
	密码: <input type="password" name="password" /><br>
	<input type="checkbox" name="autologin" value="1" checked="checked" /> 下次自动登陆<br>
	<input type="submit" value=" 登  录 " /><br>
<?php if (isset($_GET['tip'])) { ?>
	<span>用户或密码错误!</span>
<?php } ?>
</form>
</body>
</html>